/*
 * @Author: your name
 * @Date: 2021-02-26 18:03:17
 * @LastEditTime: 2021-04-08 12:09:58
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 */

import GlobalPack from 'utils/message';
import UserStore from 'store/modules/user';

/** 声明一个map对象,存储网络服务错误码 */
const map = new Map<number, string>([
  [400, '资源请求错误'],
  [401, '用户没有权限(令牌/用户名/密码错误)'],
  [403, '资源禁止访问'],
  [404, '网络请求错误,请求资源未找到'],
  [405, '网络请求错误,请求资源未允许'],
  [408, '网络资源请求超时'],
  [500, '服务器错误,请联系管理员'],
  [501, '网络未实现'],
  [502, '网络请求错误'],
  [503, '服务不可用,服务器暂时过载维护或'],
  [504, '网络连接超时'],
  [505, 'http版本不支持该请求!'],
]);

/**
 * @description: 获取接口返回的错误信息，并且通过ant-design-vue的message组件弹窗提示
 * @param {any} data - 1、接口调用成功返回的错误提示 2、接口调用失败的错误提示
 */
export const error = (data: any): void => {
  console.log(data);
  let content = '';
  if (data && data.response) {
    content = map.get(data.response.status) ?? '';
  } else {
    content = data.returnMsg || '网络连接超时,请刷新重试';
  }

  GlobalPack.message(content);
};

/**
 * @description: token失效时的提示框
 * @description: 调用vuex内的action方法退出登录并且清楚浏览器存储的信息
 */
export const failure = (): void => {
  GlobalPack.modal('登录已失效或账号在其他地方登录，请重新登录').then(() => {
    UserStore.actionUserLogout();
  });
};

/**
 * @description:格式化参数-将参数为 null undefined false Nan 空值的参数去掉
 * @param {T} obj - 接口的对象参数
 * @return {Object} - 值不为null undefined false NaN的对象
 */
export const format = <T>(obj: T): T | undefined => {
  /** 参数对象为空时直接return结束 */
  if (!obj) return;
  /** 声明一个新变量-浅拷贝传递的参数 */
  const _obj = { ...obj };
  Object.keys(_obj).forEach((item: any) => {
    const value = _obj[item];
    /** 对象的值包含以下值时,则删除对应的键值对 */
    if ([null, undefined, false, NaN, ''].includes(value)) {
      delete _obj[item];
    }
  });
  return _obj;
};
